package com.hulushuju.core.net;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * @Author: Hanjiafeng
 * @Date: 2019-05-28
 * @Desc: 内容类型
 */
@AllArgsConstructor
public enum ContentType {

    /**
     * json类型
     */
    JSON("application", "json"),

    /**
     * 文本父类型
     */
    TEXT("text", ""),

    /**
     * html类型
     */
    HTML("text", "html"),

    /**
     * 自定义类型,需自己设置type和subType
     */
    CUSTOM(null, null);

    /**
     * 父类型
     */
    @Getter
    private String superType;

    /**
     * 细分类型
     */
    @Getter
    private String subType;

    public String getType() {
        return String.join("/", superType, subType);
    }

    /**
     * 设置type
     *
     * @param superType superType
     * @return 枚举
     */
    public ContentType superType(String superType) {
        this.superType = superType;
        return this;
    }

    /**
     * 设置subType
     *
     * @param subType subType
     * @return 枚举
     */
    public ContentType subType(String subType) {
        this.subType = subType;
        return this;
    }

    @Override
    public String toString() {
        return getType();
    }

    /**
     * 整体比较
     *
     * @param contentType 比较类型
     * @return true/false
     */
    public boolean equals(ContentType contentType) {
        return toString().equalsIgnoreCase(contentType.toString());
    }

    /**
     * 比较父类型
     *
     * @param contentType 类型
     * @return t
     */
    public boolean equalsSuperType(ContentType contentType) {
        return this.superType.equalsIgnoreCase(contentType.superType);
    }

    /**
     * 比较子类型
     *
     * @param contentType 子类型
     * @return t
     */
    public boolean equalsSubType(ContentType contentType) {
        return this.subType.equalsIgnoreCase(contentType.subType);
    }
}
